﻿// ===============================================================================
//  Copyright © ymind.net. All rights reserved .
//  官方网站：http://ymind.net/
//  版权所有：彦铭工作室 老陈出品
// ===============================================================================

using System.IO;
using System.Xml;

namespace Lcsoft.UrlRewriter.Configuration
{
	/// <summary>
	/// 为自定义加载地址重写配置文档的过程提供基类。必须保证此抽象类及其派生类是线程安全的。
	/// </summary>
	public abstract class RewriterConfigurationProvider
	{
		/// <summary>
		/// 加载地址重写配置。
		/// </summary>
		/// <returns>返回 <see cref="RewriterConfiguration"/> 对象。</returns>
		public abstract RewriterConfiguration Load();

		/// <summary>
		/// 从指定的 <see cref="XmlNode"/> 加载 <see cref="RewriterConfiguration"/> 对象。
		/// </summary>
		/// <param name="node">包含地址重写规则的 <see cref="XmlNode"/>。</param>
		/// <returns>返回 <see cref="RewriterConfiguration"/> 对象。</returns>
		public RewriterConfiguration LoadFromNode(XmlNode node) { return RewriterConfigurationReader.Read(node); }

		/// <summary>
		/// 从指定文件加载 <see cref="RewriterConfiguration"/> 对象。
		/// </summary>
		/// <param name="fileName">包含地址重写规则的文件的完整路径。</param>
		/// <returns>返回 <see cref="RewriterConfiguration"/> 对象。</returns>
		public RewriterConfiguration LoadFromFile(string fileName)
		{
			if (File.Exists(fileName))
			{
				var document = new XmlDocument();

				document.Load(fileName);

				return this.LoadFromNode(document.DocumentElement);
			}

			return null;
		}
	}
}
